--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / settings / batterySaverPrefs.js
Displaying Raw • Download
meshchatx/src/frontend/js/settings/batterySaverPrefs.js e5756d7ab065475a18acdcafc008a767fcff87e0 (e5756d7a) Text, 9.04 KB
T8b949e// SPDX-License-Identifier: 0BSD AND MIT
T8b949e/**
* Battery saver preferences (localStorage).
* Safe UI/runtime throttles plus optional forced interface bitrates.
*/
Tff7b72import Te6edf3GlobalEmitter Tff7b72from Ta5d6ff"../GlobalEmitter"Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3BATTERY_SAVER_STORAGE_KEY Tff7b72= Ta5d6ff"meshchatx.batterySaver"Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3BATTERY_SAVER_CHANGED_EVENT Tff7b72= Ta5d6ff"battery-saver-prefs-changed"Tb4b4b4;
T8b949e/** @typedef {object} BatterySaverPrefs
* @property {boolean} enabled
* @property {boolean} disableVisualiserDiscovery
* @property {boolean} hideOfflineInterfaces
* @property {number} maxVisualiserInterfaces 0 = unlimited
* @property {number} visualiserReloadSeconds 0 = disable auto-reload while saver on
* @property {boolean} disableVisualiserLiveLayout
* @property {boolean} reduceBackgroundPolling
* @property {number} backgroundPollMultiplier
* @property {boolean} reduceInterfacesDiscovery
* @property {number} interfacesStatsPollSeconds
* @property {number} interfacesDiscoveryPollSeconds
* @property {boolean} applyInterfaceBitrateLimits
* @property {Record<string, number>} interfaceBitrateLimits name -> bps
* @property {Record<string, number|null>} interfaceBitratePrevious snapshot before apply
*/
T8b949e/** @type {BatterySaverPrefs} */
Tff7b72export Tff7b72const Te6edf3BATTERY_SAVER_DEFAULTS Tff7b72= Tffa657ObjectTb4b4b4.Te6edf3freezeTb4b4b4(Tb4b4b4{
Te6edf3enabledTff7b72: Tff7b72falseTb4b4b4,
Te6edf3disableVisualiserDiscoveryTff7b72: Tff7b72trueTb4b4b4,
Te6edf3hideOfflineInterfacesTff7b72: Tff7b72trueTb4b4b4,
Te6edf3maxVisualiserInterfacesTff7b72: T79c0ff8Tb4b4b4,
Te6edf3visualiserReloadSecondsTff7b72: T79c0ff60Tb4b4b4,
Te6edf3disableVisualiserLiveLayoutTff7b72: Tff7b72trueTb4b4b4,
Te6edf3reduceBackgroundPollingTff7b72: Tff7b72trueTb4b4b4,
Te6edf3backgroundPollMultiplierTff7b72: T79c0ff3Tb4b4b4,
Te6edf3reduceInterfacesDiscoveryTff7b72: Tff7b72trueTb4b4b4,
Te6edf3interfacesStatsPollSecondsTff7b72: T79c0ff5Tb4b4b4,
Te6edf3interfacesDiscoveryPollSecondsTff7b72: T79c0ff30Tb4b4b4,
Te6edf3applyInterfaceBitrateLimitsTff7b72: Tff7b72falseTb4b4b4,
Te6edf3interfaceBitrateLimitsTff7b72: Tffa657ObjectTb4b4b4.Te6edf3freezeTb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3interfaceBitratePreviousTff7b72: Tffa657ObjectTb4b4b4.Te6edf3freezeTb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
T8b949e/**
* @param {unknown} raw
* @returns {Record<string, number>}
*/
Tff7b72export Tff7b72function Te6edf3normalizeBitrateLimitsMapTb4b4b4(Te6edf3rawTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3raw Tff7b72|| Tff7b72typeof Te6edf3raw Tff7b72!== Ta5d6ff"object" Tff7b72|| Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/** @type {Record<string, number>} */
Tff7b72const Te6edf3out Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Tb4b4b4[Te6edf3nameTb4b4b4, Te6edf3valueTb4b4b4] Tff7b72of Tffa657ObjectTb4b4b4.Te6edf3entriesTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3key Tff7b72= Tffa657StringTb4b4b4(Te6edf3name Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3keyTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3bps Tff7b72= Tffa657NumberTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3bpsTb4b4b4) Tff7b72|| Te6edf3bps Tff7b72< T79c0ff0Tb4b4b4) Tff7b72continueTb4b4b4;
Te6edf3outTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3bpsTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3outTb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {unknown} raw
* @returns {Record<string, number|null>}
*/
Tff7b72export Tff7b72function Te6edf3normalizeBitratePreviousMapTb4b4b4(Te6edf3rawTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3raw Tff7b72|| Tff7b72typeof Te6edf3raw Tff7b72!== Ta5d6ff"object" Tff7b72|| Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/** @type {Record<string, number|null>} */
Tff7b72const Te6edf3out Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Tb4b4b4[Te6edf3nameTb4b4b4, Te6edf3valueTb4b4b4] Tff7b72of Tffa657ObjectTb4b4b4.Te6edf3entriesTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3key Tff7b72= Tffa657StringTb4b4b4(Te6edf3name Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3keyTb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3value Tff7b72== Tff7b72null Tff7b72|| Te6edf3value Tff7b72=== Ta5d6ff""Tb4b4b4) Tb4b4b4{
Te6edf3outTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3bps Tff7b72= Tffa657NumberTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3bpsTb4b4b4) Tff7b72|| Te6edf3bps Tff7b72< T79c0ff0Tb4b4b4) Tff7b72continueTb4b4b4;
Te6edf3outTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3bpsTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3outTb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {unknown} raw
* @returns {BatterySaverPrefs}
*/
Tff7b72export Tff7b72function Te6edf3normalizeBatterySaverPrefsTb4b4b4(Te6edf3rawTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3src Tff7b72= Te6edf3raw Tff7b72&& Tff7b72typeof Te6edf3raw Tff7b72=== Ta5d6ff"object" Tff7b72&& Tff7b72!Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3rawTb4b4b4) Tff7b72? Te6edf3raw Tff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3mult Tff7b72= Tffa657NumberTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3backgroundPollMultiplierTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3maxIfaces Tff7b72= Tffa657NumberTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3maxVisualiserInterfacesTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3vizReload Tff7b72= Tffa657NumberTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3visualiserReloadSecondsTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3statsPoll Tff7b72= Tffa657NumberTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3interfacesStatsPollSecondsTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3discPoll Tff7b72= Tffa657NumberTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3interfacesDiscoveryPollSecondsTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3enabledTff7b72: Te6edf3srcTb4b4b4.Te6edf3enabled Tff7b72=== Tff7b72trueTb4b4b4,
Te6edf3disableVisualiserDiscoveryTff7b72: Te6edf3srcTb4b4b4.Te6edf3disableVisualiserDiscovery Tff7b72!== Tff7b72falseTb4b4b4,
Te6edf3hideOfflineInterfacesTff7b72: Te6edf3srcTb4b4b4.Te6edf3hideOfflineInterfaces Tff7b72!== Tff7b72falseTb4b4b4,
Te6edf3maxVisualiserInterfacesTff7b72: Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3maxIfacesTb4b4b4)
Tff7b72? Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff128Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3maxIfacesTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72: Te6edf3BATTERY_SAVER_DEFAULTSTb4b4b4.Te6edf3maxVisualiserInterfacesTb4b4b4,
Te6edf3visualiserReloadSecondsTff7b72: Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3vizReloadTb4b4b4)
Tff7b72? Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff600Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3vizReloadTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72: Te6edf3BATTERY_SAVER_DEFAULTSTb4b4b4.Te6edf3visualiserReloadSecondsTb4b4b4,
Te6edf3disableVisualiserLiveLayoutTff7b72: Te6edf3srcTb4b4b4.Te6edf3disableVisualiserLiveLayout Tff7b72!== Tff7b72falseTb4b4b4,
Te6edf3reduceBackgroundPollingTff7b72: Te6edf3srcTb4b4b4.Te6edf3reduceBackgroundPolling Tff7b72!== Tff7b72falseTb4b4b4,
Te6edf3backgroundPollMultiplierTff7b72: Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3multTb4b4b4)
Tff7b72? Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff2Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff10Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3multTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72: Te6edf3BATTERY_SAVER_DEFAULTSTb4b4b4.Te6edf3backgroundPollMultiplierTb4b4b4,
Te6edf3reduceInterfacesDiscoveryTff7b72: Te6edf3srcTb4b4b4.Te6edf3reduceInterfacesDiscovery Tff7b72!== Tff7b72falseTb4b4b4,
Te6edf3interfacesStatsPollSecondsTff7b72: Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3statsPollTb4b4b4)
Tff7b72? Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff1Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff120Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3statsPollTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72: Te6edf3BATTERY_SAVER_DEFAULTSTb4b4b4.Te6edf3interfacesStatsPollSecondsTb4b4b4,
Te6edf3interfacesDiscoveryPollSecondsTff7b72: Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3discPollTb4b4b4)
Tff7b72? Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff5Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3minTb4b4b4(T79c0ff300Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3discPollTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72: Te6edf3BATTERY_SAVER_DEFAULTSTb4b4b4.Te6edf3interfacesDiscoveryPollSecondsTb4b4b4,
Te6edf3applyInterfaceBitrateLimitsTff7b72: Te6edf3srcTb4b4b4.Te6edf3applyInterfaceBitrateLimits Tff7b72=== Tff7b72trueTb4b4b4,
Te6edf3interfaceBitrateLimitsTff7b72: Te6edf3normalizeBitrateLimitsMapTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3interfaceBitrateLimitsTb4b4b4)Tb4b4b4,
Te6edf3interfaceBitratePreviousTff7b72: Te6edf3normalizeBitratePreviousMapTb4b4b4(Te6edf3srcTb4b4b4.Te6edf3interfaceBitratePreviousTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @returns {BatterySaverPrefs}
*/
Tff7b72export Tff7b72function Te6edf3loadBatterySaverPrefsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3localStorage Tff7b72=== Ta5d6ff"undefined"Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Tb4b4b4...Te6edf3BATTERY_SAVER_DEFAULTSTb4b4b4, Te6edf3interfaceBitrateLimitsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4, Te6edf3interfaceBitratePreviousTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3raw Tff7b72= Te6edf3localStorageTb4b4b4.Te6edf3getItemTb4b4b4(Te6edf3BATTERY_SAVER_STORAGE_KEYTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3raw Tff7b72== Tff7b72null Tff7b72|| Te6edf3raw Tff7b72=== Ta5d6ff""Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{ Tb4b4b4...Te6edf3BATTERY_SAVER_DEFAULTSTb4b4b4, Te6edf3interfaceBitrateLimitsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4, Te6edf3interfaceBitratePreviousTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3normalizeBatterySaverPrefsTb4b4b4(Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Tb4b4b4{ Tb4b4b4...Te6edf3BATTERY_SAVER_DEFAULTSTb4b4b4, Te6edf3interfaceBitrateLimitsTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4, Te6edf3interfaceBitratePreviousTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* @param {Partial<BatterySaverPrefs>} patch
* @returns {BatterySaverPrefs}
*/
Tff7b72export Tff7b72function Te6edf3saveBatterySaverPrefsTb4b4b4(Te6edf3patchTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3next Tff7b72= Te6edf3normalizeBatterySaverPrefsTb4b4b4(Tb4b4b4{ Tb4b4b4...Te6edf3loadBatterySaverPrefsTb4b4b4(Tb4b4b4)Tb4b4b4, Tb4b4b4...Te6edf3patch Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3localStorage Tff7b72!== Ta5d6ff"undefined"Tb4b4b4) Tb4b4b4{
Te6edf3localStorageTb4b4b4.Te6edf3setItemTb4b4b4(Te6edf3BATTERY_SAVER_STORAGE_KEYTb4b4b4, Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Te6edf3nextTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e/* ignore */
Tb4b4b4}
Te6edf3GlobalEmitterTb4b4b4.Te6edf3emitTb4b4b4(Te6edf3BATTERY_SAVER_CHANGED_EVENTTb4b4b4, Te6edf3nextTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3nextTb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {number} baseMs
* @param {BatterySaverPrefs} [prefs]
* @returns {number}
*/
Tff7b72export Tff7b72function Te6edf3applyBackgroundPollIntervalTb4b4b4(Te6edf3baseMsTb4b4b4, Te6edf3prefs Tff7b72= Te6edf3loadBatterySaverPrefsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3base Tff7b72= Tffa657NumberTb4b4b4(Te6edf3baseMsTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3baseTb4b4b4) Tff7b72|| Te6edf3base Tff7b72<= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3baseMsTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3prefsTb4b4b4.Te6edf3enabled Tff7b72|| Tff7b72!Te6edf3prefsTb4b4b4.Te6edf3reduceBackgroundPollingTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3baseTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3base Tff7b72* Te6edf3prefsTb4b4b4.Te6edf3backgroundPollMultiplierTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Effective visualiser auto-reload interval in ms, or null to disable.
* @param {number} defaultMs
* @param {BatterySaverPrefs} [prefs]
* @returns {number|null}
*/
Tff7b72export Tff7b72function Te6edf3effectiveVisualiserReloadMsTb4b4b4(Te6edf3defaultMsTb4b4b4, Te6edf3prefs Tff7b72= Te6edf3loadBatterySaverPrefsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3prefsTb4b4b4.Te6edf3enabledTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3defaultMsTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3visualiserReloadSeconds Tff7b72<= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3prefsTb4b4b4.Te6edf3visualiserReloadSeconds Tff7b72* T79c0ff1000Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {BatterySaverPrefs} [prefs]
* @returns {string[]}
*/
Tff7b72export Tff7b72function Te6edf3activeBatterySaverMeasuresTb4b4b4(Te6edf3prefs Tff7b72= Te6edf3loadBatterySaverPrefsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3prefsTb4b4b4.Te6edf3enabledTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3out Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3disableVisualiserDiscoveryTb4b4b4) Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"disableVisualiserDiscovery"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3hideOfflineInterfacesTb4b4b4) Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"hideOfflineInterfaces"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3maxVisualiserInterfaces Tff7b72> T79c0ff0Tb4b4b4) Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"maxVisualiserInterfaces"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3visualiserReloadSeconds Tff7b72=== T79c0ff0Tb4b4b4) Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"disableVisualiserAutoReload"Tb4b4b4)Tb4b4b4;
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3visualiserReloadSeconds Tff7b72> T79c0ff15Tb4b4b4) Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"slowVisualiserReload"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3disableVisualiserLiveLayoutTb4b4b4) Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"disableVisualiserLiveLayout"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3reduceBackgroundPollingTb4b4b4) Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"reduceBackgroundPolling"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3reduceInterfacesDiscoveryTb4b4b4) Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"reduceInterfacesDiscovery"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3applyInterfaceBitrateLimits Tff7b72&& Tffa657ObjectTb4b4b4.Te6edf3keysTb4b4b4(Te6edf3prefsTb4b4b4.Te6edf3interfaceBitrateLimits Tff7b72|| Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4.Te6edf3length Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3outTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"applyInterfaceBitrateLimits"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3outTb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {Record<string, any>} interfacesMap
* @param {Record<string, number>} limits
* @returns {{ bitrates: Record<string, number>, previous: Record<string, number|null> }}
*/
Tff7b72export Tff7b72function Te6edf3buildBitrateApplyPayloadTb4b4b4(Te6edf3interfacesMapTb4b4b4, Te6edf3limitsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3bitrates Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3previous Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3src Tff7b72= Te6edf3interfacesMap Tff7b72&& Tff7b72typeof Te6edf3interfacesMap Tff7b72=== Ta5d6ff"object" Tff7b72? Te6edf3interfacesMap Tff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3lim Tff7b72= Te6edf3normalizeBitrateLimitsMapTb4b4b4(Te6edf3limitsTb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Tb4b4b4[Te6edf3nameTb4b4b4, Te6edf3bpsTb4b4b4] Tff7b72of Tffa657ObjectTb4b4b4.Te6edf3entriesTb4b4b4(Te6edf3limTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Te6edf3name Tff7b72in Te6edf3srcTb4b4b4)Tb4b4b4) Tff7b72continueTb4b4b4;
Tff7b72const Te6edf3current Tff7b72= Te6edf3srcTb4b4b4[Te6edf3nameTb4b4b4]Tff7b72?Tb4b4b4.Te6edf3bitrateTb4b4b4;
Tff7b72const Te6edf3parsed Tff7b72= Te6edf3current Tff7b72== Tff7b72null Tff7b72|| Te6edf3current Tff7b72=== Ta5d6ff"" Tff7b72? Tff7b72null Tff7b72: Tffa657NumberTb4b4b4(Te6edf3currentTb4b4b4)Tb4b4b4;
Te6edf3previousTb4b4b4[Te6edf3nameTb4b4b4] Tff7b72= Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3parsedTb4b4b4) Tff7b72? Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3parsedTb4b4b4) Tff7b72: Tff7b72nullTb4b4b4;
Te6edf3bitratesTb4b4b4[Te6edf3nameTb4b4b4] Tff7b72= Te6edf3bpsTb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{ Te6edf3bitratesTb4b4b4, Te6edf3previous Tb4b4b4}Tb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────